package com.company.section3;

import java.util.Observable;
import java.util.Observer;
import java.util.Vector;

/**
 * @author cbf4Life cbf4life@126.com
 * I'm glad to share my knowledge with you all.
 */
public class EventDispatch implements Observer {
    //单例模式
    private final static EventDispatch dispatch = new EventDispatch();
    //事件消费者
    private Vector<EventCustomer> customer = new Vector<EventCustomer>();

    //不允许生成新的实例
    private EventDispatch() {

    }

    //获得单例对象
    public static EventDispatch getEventDispathc() {
        return dispatch;
    }

    //事件触发
    public void update(Observable o, Object arg) {
        //事件的源头
        Product product = (Product) arg;
        //事件
        ProductEvent event = (ProductEvent) o;

        //处理者处理，这里是中介者模式的核心，可以是很复杂的业务逻辑
        for (EventCustomer e : customer) {
            //处理能力是否匹配
            for (EventCustomType t : e.getCustomType()) {
                if (t.getValue() == event.getEventType().getValue()) {
                    e.exec(event);
                }
            }

        }
    }

    //注册事件处理者
    public void registerCustomer(EventCustomer _customer) {
        customer.add(_customer);
    }


}

